//package cn.common.config;
//
///**
// * Copyright
// *
// * @Author WuHuang
// * @Date 2022/12/21
// */
//
//
//import cn.common.annotation.KafkaMetaMessage;
//import org.apache.kafka.common.serialization.StringDeserializer;
//import org.apache.kafka.common.serialization.StringSerializer;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
//import org.springframework.kafka.config.KafkaListenerContainerFactory;
//import org.springframework.kafka.core.ConsumerFactory;
//import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
//import org.springframework.kafka.core.DefaultKafkaProducerFactory;
//import org.springframework.kafka.core.KafkaTemplate;
//import org.springframework.kafka.core.ProducerFactory;
//import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
//import org.springframework.kafka.listener.ContainerProperties.AckMode;
//import org.springframework.kafka.support.serializer.JsonDeserializer;
//import org.springframework.kafka.support.serializer.JsonSerializer;
//
//import java.util.HashMap;
//import java.util.Map;
//
//@Configuration
//public class RetryKafkaConfig {
//    @Value("${basic.retry.config.kafka.bootstrap-servers:2}")
//    private String bootstrapServers;
//    @Value("${basic.retry.config.kafka.consumer.enable-auto-commit:true}")
//    private boolean enableAutoCommit;
//    private String trustedPackage = "com.tencent.sr.rmall.springbootstarter.kafka";
//
//    public RetryKafkaConfig() {
//    }
//
//    @Bean(
//            name = {"kafkaRetryTemplate"}
//    )
//    public KafkaTemplate<Integer, KafkaMetaMessage> kafkaRetryTemplate() {
//        return new KafkaTemplate(this.producerFactory());
//    }
//
//    @Bean(
//            name = {"kafkaRetryContainerFactory"}
//    )
//    KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<Integer, String>> kafkaRetryContainerFactory() {
//        ConcurrentKafkaListenerContainerFactory<Integer, String> factory = new ConcurrentKafkaListenerContainerFactory();
//        factory.setConsumerFactory(this.consumerFactory());
//        factory.setConcurrency(3);
//        factory.getContainerProperties().setPollTimeout(3000L);
//        factory.getContainerProperties().setAckMode(AckMode.MANUAL_IMMEDIATE);
//        factory.getContainerProperties().setPollTimeout(15000L);
//        return factory;
//    }
//
//    private ProducerFactory<Integer, KafkaMetaMessage> producerFactory() {
//        return new DefaultKafkaProducerFactory(this.producerConfigs());
//    }
//
//    public ConsumerFactory<Integer, String> consumerFactory() {
//        return new DefaultKafkaConsumerFactory(this.consumerConfigs());
//    }
//
//    private Map<String, Object> producerConfigs() {
//        Map<String, Object> props = new HashMap();
//        props.put("bootstrap.servers", this.bootstrapServers);
//        props.put("retries", 10);
//        props.put("acks", "all");
//        props.put("batch.size", 1000);
//        props.put("buffer.memory", 33554432);
//        props.put("key.serializer", StringSerializer.class);
//        props.put("value.serializer", JsonSerializer.class);
//        return props;
//    }
//
//    private Map<String, Object> consumerConfigs() {
//        Map<String, Object> props = new HashMap();
//        props.put("bootstrap.servers", this.bootstrapServers);
//        props.put("group.id", "kafka");
//        props.put("enable.auto.commit", this.enableAutoCommit);
//        props.put("auto.commit.interval.ms", 1000);
//        props.put("key.deserializer", StringDeserializer.class);
//        props.put("value.deserializer", JsonDeserializer.class);
//        props.put("spring.json.trusted.packages", this.trustedPackage);
//        return props;
//    }
//}
//
